#ifndef FABRICA_BONUS_H
#define FABRICA_BONUS_H

#include "PersonajeBonus.h"
#include "PropiedadesFabricaBonus.h"
#include "Lista.h"
#include "Sorteo.h"
#include "Punto.h"

using namespace std;

class FabricaBonus{

private:

	static bool instance ;

	bool sorteoCargado;
	
	static FabricaBonus* singleton ;

	Lista<PropiedadesFabricaBonus>* listaPropiedades ;

	void inicializar();

	PersonajeBonus* getBonusDuplicaMisPuntosAcumulados();

	PersonajeBonus* getBonusCambioDePresa();

	PersonajeBonus* getBonusAdquirirPuntosDelOponente();

	PersonajeBonus* getBonusCongelar();

	PersonajeBonus* getBonusDuplicarVelocidad();

	PersonajeBonus* getBonusReducirVelocidadOponente();

	Sorteo* sorteo ;

	void cargarSorteo();

	FabricaBonus();

public:

	// NOmbre de bonus que permite invertir roles entre personajes
	static std::string ID_CARNIVORO ;
	// nombres de bonus especiales
	static std::string ID_CONGELAR  ;
	static std::string ID_DUPLICA ;
	static std::string ID_CAMBIO_PRESA  ;
	static std::string ID_PTO_OPONENTE ;
	static std::string ID_RAPIDO  ;
	static std::string ID_LENTO  ;

	static FabricaBonus* getInstance();

	PropiedadesFabricaBonus* getPropiedades(const string& id);

	PersonajeBonus* getProximoBonus(Punto* medio);

	Lista<PropiedadesFabricaBonus>* getListaPropiedades();

	void destroy();
	
	~FabricaBonus();
};

#endif